/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.tarifador.view;

import br.com.tarifador.controller.UserLoginRn;
import br.com.tarifador.dataModel.PerfilDataModel;
import br.com.tarifador.dataModel.UsuarioDataModel;
import br.com.tarifador.model.PerfilDeAcesso;
import br.com.tarifador.model.Usuario;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.hibernate.HibernateException;
import org.primefaces.context.RequestContext;
import org.primefaces.event.NodeSelectEvent;
import org.primefaces.event.NodeUnselectEvent;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;

/**
 *
 * @author charles
 */
@ManagedBean
@SessionScoped
public class UsuarioBean {

    private UserLoginRn usuarioRN = new UserLoginRn();
    private List<PerfilDeAcesso> listaUsuarioPerfil;
    private Usuario usuarioSelected;
    private PerfilDataModel perfilModel;
    private TreeNode root;
    private TreeNode[] selectedNodes;
    private Usuario userTree;
    private TreeNode node0;
    private TreeNode node1;
    private TreeNode node2;
    private TreeNode node3;
    private TreeNode node4;
    private TreeNode node5;
    private boolean value1;
    private PerfilDeAcesso perfilDeAcesso = new PerfilDeAcesso();

    public UsuarioBean() {
        root = (TreeNode) new DefaultTreeNode("Root", null);
        node0 = new DefaultTreeNode("Empresa", root);
        node1 = new DefaultTreeNode("Cadastro", root);
        node2 = new DefaultTreeNode("Tarifas", root);
        node3 = new DefaultTreeNode("Relatórios", root);
        node4 = new DefaultTreeNode("Usuários", root);
        node5 = new DefaultTreeNode("Ferramentas", root);
        //Trre de Cadastro
        TreeNode node100 = new DefaultTreeNode("Agenda", node1);
        TreeNode node101 = new DefaultTreeNode("Centro de Custo", node1);
        TreeNode node102 = new DefaultTreeNode("Departamento", node1);
        TreeNode node103 = new DefaultTreeNode("Usuário Ramal", node1);
        TreeNode node104 = new DefaultTreeNode("Senha", node1);
        TreeNode node105 = new DefaultTreeNode("PABX", node1);
        TreeNode node106 = new DefaultTreeNode("Linha", node1);
        TreeNode node107 = new DefaultTreeNode("Ramal", node1);

    }

    public void addMessage() {
        String summary = value1 ? "Checked" : "Unchecked";

        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(summary));
    }

    public void onNodeSelect(NodeSelectEvent event) {
        if (event.getTreeNode().getData().equals("Empresa")) {
            perfilDeAcesso.setEnableEmpresa(true);
        }
        if (event.getTreeNode().getData().equals("Cadastro")) {
            perfilDeAcesso.setEnableCadastro(true);
        }
        if (event.getTreeNode().getData().equals("Tarifas")) {
            perfilDeAcesso.setEnableTarifas(true);
        }
        if (event.getTreeNode().getData().equals("Relatórios")) {
            perfilDeAcesso.setEnableRelatorios(true);
        }
        if (event.getTreeNode().getData().equals("Usuários")) {
            perfilDeAcesso.setEnableUsuario(true);
        }
        if (event.getTreeNode().getData().equals("Ferramentas")) {
            perfilDeAcesso.setEnableFerramentas(true);
        }
        if (event.getTreeNode().getData().equals("Agenda")) {
            perfilDeAcesso.setEnableCadastroAgenda(true);
        }
        if (event.getTreeNode().getData().equals("Centro de Custo")) {
            perfilDeAcesso.setEnableCadastroCentroDecusto(true);
        }
        if (event.getTreeNode().getData().equals("Departamento")) {
            perfilDeAcesso.setEnableCadastroDepartamento(true);
        }
        if (event.getTreeNode().getData().equals("Usuário Ramal")) {
            perfilDeAcesso.setEnableCadastroUSuarioRamal(true);
        }
        if (event.getTreeNode().getData().equals("Senha")) {
            perfilDeAcesso.setEnableCadastroSenha(true);
        }
        if (event.getTreeNode().getData().equals("PABX")) {
            perfilDeAcesso.setEnableCadastroPABX(true);
        }
        if (event.getTreeNode().getData().equals("Linha")) {
            perfilDeAcesso.setEnableCadastroLinha(true);
        }
        if (event.getTreeNode().getData().equals("Ramal")) {
            perfilDeAcesso.setEnableCadastroRamal(true);
        }

    }

    public void onNodeUnselect(NodeUnselectEvent event) {
        if (event.getTreeNode().getData().equals("Empresa")) {
            perfilDeAcesso.setEnableEmpresa(false);
        }
        if (event.getTreeNode().getData().equals("Cadastro")) {
            perfilDeAcesso.setEnableCadastro(false);
        }
        if (event.getTreeNode().getData().equals("Tarifas")) {
            perfilDeAcesso.setEnableTarifas(false);
        }
        if (event.getTreeNode().getData().equals("Relatórios")) {
            perfilDeAcesso.setEnableRelatorios(false);
        }
        if (event.getTreeNode().getData().equals("Usuários")) {
            perfilDeAcesso.setEnableUsuario(false);
        }
        if (event.getTreeNode().getData().equals("Ferramentas")) {
            perfilDeAcesso.setEnableFerramentas(false);
        }
        if (event.getTreeNode().getData().equals("Agenda")) {
            perfilDeAcesso.setEnableCadastroAgenda(false);
        }
        if (event.getTreeNode().getData().equals("Centro de Custo")) {
            perfilDeAcesso.setEnableCadastroCentroDecusto(false);
        }
        if (event.getTreeNode().getData().equals("Departamento")) {
            perfilDeAcesso.setEnableCadastroDepartamento(false);
        }
        if (event.getTreeNode().getData().equals("Usuário Ramal")) {
            perfilDeAcesso.setEnableCadastroUSuarioRamal(false);
        }
        if (event.getTreeNode().getData().equals("Senha")) {
            perfilDeAcesso.setEnableCadastroSenha(false);
        }
        if (event.getTreeNode().getData().equals("PABX")) {
            perfilDeAcesso.setEnableCadastroPABX(false);
        }
        if (event.getTreeNode().getData().equals("Linha")) {
            perfilDeAcesso.setEnableCadastroLinha(false);
        }
        if (event.getTreeNode().getData().equals("Ramal")) {
            perfilDeAcesso.setEnableCadastroRamal(false);
        }
    }

    public void salvaUsuario() {
        boolean salvar = false;
        boolean validaSenha = false;

        try {
            validaSenha = validaSenha();

            if (validaSenha == true) {

                salvar = usuarioRN.salvaUsuario(perfilDeAcesso);
            }
        } catch (HibernateException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao consultar o banco de dados " + e.getMessage(), ""));
        } catch (Throwable e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar os dados! " + e.getMessage(), ""));
        }
        if (salvar == false) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar dados em brancos!", ""));
        } else {
            listaUsuarioPerfil();
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_INFO, "Operacao relizada com sucesso!!", ""));
        }
    }

    public boolean validaSenha() {

        boolean valida = false;
        valida = usuarioRN.validaSenha();
        if (valida == true) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Senha do " + usuarioRN.getUsuario().getNome() + "validada com sucesso!"));
        } else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Senha inválida!"));

        }
        return valida;
    }

    public void listaUsuarioPerfil() {
        listaUsuarioPerfil = new ArrayList<PerfilDeAcesso>();
        try {
            listaUsuarioPerfil = usuarioRN.listaDeUsuariosPerfil();

        } catch (HibernateException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao consultar o banco de dados " + e.getMessage(), ""));
        } catch (Throwable e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar os dados! " + e.getMessage(), ""));
        }
        this.perfilModel = new PerfilDataModel(listaUsuarioPerfil);
    }

    public void alteraUsuario() {
        boolean valida = false;
        try {
            valida = usuarioRN.updateUsuario(perfilDeAcesso, usuarioSelected.getId());

        } catch (HibernateException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao consultar o banco de dados " + e.getMessage(), ""));
        } catch (Throwable e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar os dados! " + e.getMessage(), ""));
        }
        if (valida == false) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar dados em brancos!", ""));
        } else {
            listaUsuarioPerfil();
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_INFO, "Operacao relizada com sucesso!!", ""));

        }
    }

    public void deleteUsuario() {
        boolean valida = false;
        try {
            valida = usuarioRN.deletaUsuario(usuarioSelected.getId());
        } catch (HibernateException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar os dados!\n " + e.getMessage(), ""));
        } catch (Throwable e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar os dados!\n " + e.getMessage(), ""));
        }
        if (valida == false) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar dados em brancos!", ""));
        } else {
            listaUsuarioPerfil();
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_INFO, "Operacao relizada com sucesso!!", ""));
        }
    }

    public void btnAlterarUsuario() {
        RequestContext request = RequestContext.getCurrentInstance();
        try {
            if (usuarioSelected.getId() != null && usuarioSelected.getId() > 0) {
                request.addCallbackParam("sucesso", true);
            } else {
                request.addCallbackParam("sucesso", false);
            }
        } catch (NullPointerException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Selecione um campo!", ""));
        }
    }

    public void limpaLista() {
        if (perfilModel != null) {
            listaUsuarioPerfil.clear();
            perfilModel = new PerfilDataModel(listaUsuarioPerfil);
        }
    }

    public List<PerfilDeAcesso> getListaUsuarioPerfil() {
        return listaUsuarioPerfil;
    }

    public void setListaUsuarioPerfil(List<PerfilDeAcesso> listaUsuarioPerfil) {
        this.listaUsuarioPerfil = listaUsuarioPerfil;
    }

 
    public PerfilDataModel getPerfilModel() {
        return perfilModel;
    }

    public void setPerfilModel(PerfilDataModel perfilModel) {
        this.perfilModel = perfilModel;
    }

    public PerfilDeAcesso getPerfilDeAcesso() {
        return perfilDeAcesso;
    }

    public void setPerfilDeAcesso(PerfilDeAcesso perfilDeAcesso) {
        this.perfilDeAcesso = perfilDeAcesso;
    }

    public UserLoginRn getUsuarioRN() {
        return usuarioRN;
    }

    public void setUsuarioRN(UserLoginRn usuarioRN) {
        this.usuarioRN = usuarioRN;
    }

    public Usuario getUsuarioSelected() {
        return usuarioSelected;
    }

    public void setUsuarioSelected(Usuario usuarioSelected) {
        this.usuarioSelected = usuarioSelected;
    }

    public TreeNode getNode0() {
        return node0;
    }

    public void setNode0(TreeNode node0) {
        this.node0 = node0;
    }

    public TreeNode getRoot() {
        return root;
    }

    public void setRoot(TreeNode root) {
        this.root = root;
    }

    public TreeNode[] getSelectedNodes() {
        return selectedNodes;
    }

    public void setSelectedNodes(TreeNode[] selectedNodes) {
        this.selectedNodes = selectedNodes;
    }

    public boolean isValue1() {
        return value1;
    }

    public void setValue1(boolean value1) {
        this.value1 = value1;
    }
}
